今天是第21天了!
前兩天說明了matplotlib是如何將資料視覺化的,今天就要來看看如何用Pandas就可以將資料視覺化!
首先,先import
import pandas as pd
不過這裡我會直接使用yahoo的資料所以再加上下面兩行:
from pandas_datareader import data
import pandas_datareader.data as web
如果顯示沒有pandas_datareader
的話:
conda install pandas_datareader
or
pip install pandas_datareader
import datetime:
import datetime
關於pandas_datareader
的問題,上網找了發現似乎也不能夠使用了,這是測試後能夠執行的程式碼:
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import pandas_datareader as web
開始定義資料吧:
start = datetime.datetime(2016, 1, 1)
end = datetime.datetime(2017, 1, 1)
上面我們先定義start開始時間與end結束時間為我們要抓取的資料範圍。
接下來抓取yahoo上的資料:
data = web.DataReader("F", 'yahoo', start, end)
yahoo
上"F"
也就是Finance的資料,並給予要抓取的開始時間start與結束時間end。不過我剛看了一下,yahoo
的金融資料似乎在2018年2月停止運作無法使用了(參考來源),測試資料可以改成用morningstar
程式碼:
web.DataReader('F', 'morningstar', start, end)
OK,接下來就要來看今天最神奇的部分了!
有了資料後,直接使用plot()
函數:
data.plot()
然後!登冷!你就會看到:
竟然不需要自行定義資料或標籤!
那因為Volume
的數值太大了,以至於其他的值變動在圖上會看不出來,現在要取單獨一個值來看!
假設我們要看Close
:
data.plot(y="Close")
我們只需要改變plot()
內的y
參數就可以了!
或是我們之前在說明pandas的時候是如何取出單項資料的還記得嗎!
只要:
data["Close"]
所以繪圖也可以這樣做:
data["Close"].plot()
兩個方式是一樣的哦!
既然可以用data["Close"]
一次取單項了,要取兩項資料當然可以:
data[["High","Low"]].plot()
只需要裡面放list
格式就可以了!是不是跟超級方便呢!
用padas繪圖,若要用Numpy的資料呢?
import numpy as np
df = pd.DataFrame(np.random.randn(100, 4), index=pd.date_range('12/31/2017', periods=100), columns=list('ABCD'))
上面建立一筆隨機的資料np.random.randn(100, 4)
,x為日期,columns設定為A,B,C,D
將資料累加
df = df.cumsum()
df.plot()
今天說明了如何用pandas將資料視覺化,也介紹了pandas-datareader
這個好用的東西!
如果想暸解更多使用pandas-datareader抓股票的話可以到: pandas-datareader
Excuseme me,
這一篇有些地方似乎沒法執行唷,小妹一直沒有試成功,都卡在pandas_datareader問題,國外討論區似乎建議用0.7.0版本,因為也是一樣有error問題,另外有關.plot直接匯出profile chart,我也沒有成功說...sadly...
P.S. from pandas_datareader import data 載入data,後面又宣告data為收下來的資料,這樣的命名好像也不行...我的環境是 VS-Code,謝謝您~
嗨,關於pandas_datareader
的問題,我剛剛上網找了發現似乎也不能夠使用了,這是我測試後能夠執行的程式碼:
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import datetime
import pandas_datareader as web
不過我剛看了一下,yahoo的金融資料似乎也在2018年2月停止運作無法使用了(參考來源),測試資料可以改成用morningstar
程式碼:
web.DataReader('F', 'morningstar', start, end)
執行結果:
感謝你的回覆,希望回答有幫助到你哦!
謝謝您~^o^~y
也提供另一方法,但要先用pip install去載入fix_yahoo_finance
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
from pandas_datareader import data
import fix_yahoo_finance as yf
yf.pdr_override()
import datetime
start = datetime.datetime(2017, 1, 1)
end = datetime.datetime(2018, 1, 1)
df = data.get_data_yahoo('MS', start, end)
print(df[['Open', 'Close']])
df[['Open','Close']].plot() #Spyder可用此法秀chart